cssnode: Make path node create matcher without copying
authorBenjamin Otte <otte@redhat.com>
Mon, 9 Feb 2015 10:29:48 +0000 (11:29 +0100)
committerBenjamin Otte <otte@redhat.com>
Wed, 18 Mar 2015 14:23:30 +0000 (15:23 +0100)
... the WidgetPath. This uses the functionality introduced in the
previous commits.

gtk/gtkcsspathnode.c

index 1e5018202e5130cf081a86397dc689e650a404c7..e3c2e160027528fa6681f3daf9c5a3ddd7a57a8f 100644 (file)
@@ -47,6 +47,22 @@ gtk_css_path_node_invalidate (GtkCssNode *node)
     }
 }
 
+gboolean
+gtk_css_path_node_real_init_matcher (GtkCssNode     *node,
+                                     GtkCssMatcher  *matcher,
+                                     GtkWidgetPath **path_out)
+{
+  GtkCssPathNode *path_node = GTK_CSS_PATH_NODE (node);
+
+  if (path_node->path == NULL ||
+      gtk_widget_path_length (path_node->path) == 0)
+    return FALSE;
+
+  return _gtk_css_matcher_init (matcher,
+                                path_node->path,
+                                gtk_css_node_get_declaration (node));
+}
+
 static GtkWidgetPath *
 gtk_css_path_node_real_create_widget_path (GtkCssNode *node)
 {
@@ -98,6 +114,7 @@ gtk_css_path_node_class_init (GtkCssPathNodeClass *klass)
   object_class->finalize = gtk_css_path_node_finalize;
 
   node_class->invalidate = gtk_css_path_node_invalidate;
+  node_class->init_matcher = gtk_css_path_node_real_init_matcher;
   node_class->create_widget_path = gtk_css_path_node_real_create_widget_path;
   node_class->get_widget_path = gtk_css_path_node_real_get_widget_path;
   node_class->get_style_provider = gtk_css_path_node_get_style_provider;